// 将任意进制数字转换为十进制
fn to_decimal(num_str: &str, from_base: u32) -> u32 {
    let mut result = 0;
    let digits = num_str.chars().collect::<Vec<char>>();
    for (i, digit) in digits.iter().rev().enumerate() {
        let digit_value = match digit {
            '0'..='9' => digit.to_digit(10).unwrap(),
            'a'..='f' => digit.to_digit(16).unwrap(),
            'A'..='F' => digit.to_digit(16).unwrap(),
            _ => panic!("Invalid character in the input string"),
        };
        result += digit_value * from_base.pow(i as u32);
    }
    result
}

// 将十进制数字转换为目标进制
fn from_decimal(num: u32, to_base: u32) -> String {
    if num == 0 {
        return String::from("0");
    }

    let mut result = String::new();
    let mut n = num;

    while n > 0 {
        let remainder = n % to_base;
        let digit = match remainder {
            0..=9 => char::from_digit(remainder, 10).unwrap(),
            10..=15 => char::from_digit(remainder, 16).unwrap(),
            _ => unreachable!(),
        };
        result.push(digit);
        n /= to_base;
    }

    result.chars().rev().collect()
}

// 主转换函数，支持从任意进制到目标进制
pub fn convert_base(num_str: &str, to_base: u32) -> String {
    // 提取数字和进制
    let parts: Vec<&str> = num_str.split('(').collect();
    let num_str = parts[0]; // 数字部分
    let from_base: u32 = parts[1].trim_end_matches(')').parse().unwrap(); // 进制部分

    // 将数字从原进制转换为十进制
    let decimal_value = to_decimal(num_str, from_base);

    // 将十进制数字转换为目标进制
    from_decimal(decimal_value, to_base)
}
